iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1
Software Development

LeetCode30系列 第 8

[LeetCode30] Day8 - 1275. Find Winner on a Tic Tac Toe Game

  • 分享至 

  • xImage
  •  

題目

延續昨天奇怪的故事,忍者龜和兔子因為賽跑沒辦法分出勝負,所以決定要來PK圈圈叉叉啦
(這句是廢話,不是題目請忽略)

大家應該都會玩井字遊戲(俗稱圈圈叉叉)吧,想我國中都沒在上課,在那研究怎樣玩能必勝,但好像沒找出結果QQ
九宮格每格有自己座標 如圖
https://ithelp.ithome.com.tw/upload/images/20200923/20129147RAQHr2DprY.png

那你能得到圈圈叉叉的順序,其中由忍者龜先畫
https://ithelp.ithome.com.tw/upload/images/20200923/20129147g1IhF4vSo8.png

廉明公正的你,要判斷誰贏誰輸,為烏龜與兔子結束長達以久的跑步比賽!
如果平手則回傳Draw,如果目前的步數無法判斷輸贏平手,則回傳Pending

解法

建一個棋盤,然後用2個值分別代表兔子與烏龜,填完所有後,在逐行、逐列、對角線判斷。

Code

class Solution {
public:
    string tictactoe(vector<vector<int>>& moves) {
        vector<vector<string>> grids(3,vector<string>(3,"0"));
        
        //player A and B
        for(int i = 0;i < moves.size(); i++) {
            //first move: A
            if(i % 2 == 0){
                grids[moves[i][0]][moves[i][1]] = "A";
            }
            else{
                grids[moves[i][0]][moves[i][1]] = "B";
            }
        }
        
        //row and colum
        for(int i=0;i<3;i++){
            if(grids[i][0]!="0" && grids[i][0]==grids[i][1] && grids[i][1]==grids[i][2]) { 
                return grids[i][0];
            }
            if(grids[0][i]!="0" && grids[0][i]==grids[1][i] && grids[1][i]==grids[2][i]) { 
                return grids[0][i];
            }
        }
        
        //diagonal
        if(grids[0][0]!="0" && grids[0][0]==grids[1][1] && grids[1][1]==grids[2][2]){ 
            return grids[0][0];
        } 
        if(grids[0][2]!="0" && grids[0][2]==grids[1][1] && grids[1][1]==grids[2][0]){
            return grids[0][2];
        } 
        return (moves.size()==9)?"Draw":"Pending";
    }
};

https://ithelp.ithome.com.tw/upload/images/20200923/20129147STOldowszN.png


上一篇
[LeetCode30] Day7 - 141. Linked List Cycle
下一篇
[LeetCode30] Day9 - 198. House Robber
系列文
LeetCode3030
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言